/* Copyright 2010 Michael Wenders, michaelwenders <at> gmx <dot> de

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "lcm_includes.h"

LcmNetwork::LcmNetwork(string serverip, int port)
{
	this->serverip = serverip;
	this->port = port;
}

LcmNetwork::~LcmNetwork()
{
	close(clientSocket);
}

int LcmNetwork::init()
{
	this->clientSocket = socket(AF_INET, SOCK_STREAM, 0);

	unsigned long addr = inet_addr(serverip.c_str());

	server.sin_family=AF_INET;
	server.sin_port=htons(port);

	memcpy( (char *)&server.sin_addr, &addr, sizeof(addr));

	if( connect ( this->clientSocket, (struct sockaddr*)&server,sizeof(server)) == -1 )
	{
		cout << "Could not connect to " << serverip << ":" << port << endl;
		return NOT_OK;
	}
	else
	{
		return OK;
	}

}

int LcmNetwork::sendGreeting()
{
	return lcm::writeSocket(this->clientSocket,lcm::intToString(lcm::lcmp::LCMP_GREETING));
}

int LcmNetwork::sendVersion()
{
	return lcm::writeSocket(this->clientSocket,LCM_VERSION);
}

int LcmNetwork::sendHostname()
{
	return lcm::writeSocket(this->clientSocket,lcm::stringToBash("hostname"));
}

int LcmNetwork::getClientSocket()
{
	return this->clientSocket;
}
